package com.zcy.PersonMess;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
/**
 * 通讯录功能说明：从文件中载入通讯录/查找/修改/删除联系人/保存通讯录.
 * @author zcy
 * @version 1.0
 */
public class AddPerson extends ArrayList<Person>{
    public AddPerson(){
        
    }
    /**
     * 将文件里的内容读入到当前列表中.
     * <p>现将文件里的内容读入一个BufferedReader中<br>
     * 再从BufferedReader中读取到列表中
     * @param bookFile 需要打开的文件
     * @return 列表中的信息
     */
    public Person[] loadAddressBook(File bookFile){
        //从文件中载入通讯录
        try {
            FileReader fr=new FileReader(bookFile);
            BufferedReader bfReader=new BufferedReader(fr);
            String temp;
            while((temp=bfReader.readLine())!=null){
                String attribute[]=temp.split(","); //这一步将严格按照格式分割联系人信息，取得 姓名,电话号码,通讯地址
                this.add(new Person(attribute[0],attribute[1],attribute[2],attribute[3],attribute[4])); //映射到通讯录对象中的联系人
            }
            
            bfReader.close();
            fr.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            System.out.println("从文件'"+bookFile.getName()+"'载入通讯录失败!");
            e.printStackTrace();
        }   
        Person person[]=new Person[this.size()];
        return this.toArray(person);
    }
    /**
     * 将列表中的数据存入文件.
     * @param bookFile 需要存入的文件
     */
    public void saveAddressBook(File bookFile){
        Person p;
       
        try {
            FileWriter fw=new FileWriter(bookFile);
            BufferedWriter bfWriter=new BufferedWriter(fw);
            Iterator<Person> itor=this.iterator();//迭代器
            while(itor.hasNext()){
                p=itor.next();//下一个联系人
                bfWriter.write(p.getName() +","+p.getSex()+","+p.getAddress()+","+p.getNumber()+","+p.getMail()); //按照格式保存联系人
                bfWriter.newLine();
                bfWriter.flush();
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            System.out.println("写入通讯录文件"+bookFile.getName()+"失败！");
            e.printStackTrace();
        }       
    }
    /**
     * 向列表中添加联系人.
     * @param p 新增的联系人
     * @return 被添加的联系人的姓名
     */
    public Person[] addPerson(Person p){
        this.add(p);//新增联系人
        Person person[]=new Person[this.size()];
        return this.toArray(person);
    }
    /**
     * 通过号码删除联系人.
     * @param number 被删联系人的号码
     * @return 删除联系人以后的列表信息
     */
    public Person[] removePerson(String number){
         for(int i=0;i<this.size();i++){
        	 Person p=this.get(i);
        	 if(number.equals(p.getNumber())){
        	   this.remove(p);
           }
         }
         Person person[]=new Person[this.size()];
         return this.toArray(person);
    }
    
    /**
     * 修改联系人信息.
     * <p>通过电话号码找到联系人（号码是唯一的）<br>
     * new 一个新的联系人替换
     * @param oldNumber 需要修改的联系人号码
     * @param pNew 修改后的联系人
     */
    public void modifiedPerson(String oldNumber,Person pNew){
    	Iterator<Person> itor=this.iterator();//迭代器
        Person p;
        while(itor.hasNext()){
            p=itor.next();//查下一个联系人
            String pNumber=p.getNumber();//取得联系人名字
            if(oldNumber.equals(pNumber)){
            	this.set(this.indexOf(p),pNew);
            }
        }    
    }
    /**
     * 通过姓名查找.
     * @param name 查询联系人姓名
     * @return 姓名相同的联系人的信息数组
     */
    public Person[] findPerson_name(String name){
        Iterator<Person> itor=this.iterator();//迭代器
        Person p;
        ArrayList<Person> finds=new ArrayList<Person>(0);//保存查找结果
        while(itor.hasNext()){
            p=itor.next();//查下一个联系人
            String pName=p.getName();//取得联系人名字
            boolean b=name.matches("["+pName+"]*"); //匹配联系人名字
            if(b) finds.add(p);//存储搜索到的联系人
        }
        Person findp[]=new Person[finds.size()];
        return finds.toArray(findp);
    }
    /**
     * 通过号码查找联系人.
     * @param number 查询联系人的号码
     * @return 查找到的联系人信息
     */
    public Person findPerson_number(String number){
        Iterator<Person> itor=this.iterator();//迭代器
        Person p;
        Person finds=new Person();//保存查找结果
        while(itor.hasNext()){
            p=itor.next();//查下一个联系人
            String pNumber=p.getNumber();//取得联系人名字
            //boolean b=number.matches("["+pNumber+"]*"); //匹配联系人名字
            if(pNumber.equals(number)) 
            {
            	finds=p;
            	break;
            }else finds=new Person("该联系人不存在","0","0","0","0");//存储搜索到的联系人
        }
       
        return finds;
    }
    
    public int getSize(){
        return this.size();//返回通讯录联系人数目
    }
}
